home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / dev / e / StdErr.lha / StdErr / StdErrExample.E < prev    next >
Encoding:
Text File  |  1994-04-09  |  3.0 KB  |  144 lines

  1. MODULE 'dos/datetime','dos/dos'
  2.  
  3. RAISE "OPEN" IF Open() = NIL,
  4.       "MEM"  IF New() = NIL
  5.  
  6. OBJECT err_port
  7.  filename,
  8.  private,
  9.  fh
  10. ENDOBJECT
  11.  
  12. DEF stderr=0:PTR TO err_port
  13.  
  14. PROC err_New(filename) HANDLE
  15.  IF stderr THEN err_Dispose()
  16.  stderr:=New(SIZEOF err_port)
  17.  stderr.filename:=filename
  18.  stderr.private:=0
  19.  stderr.fh:=0
  20. EXCEPT
  21.  Raise(exception)
  22. ENDPROC
  23.  
  24. PROC err_Close()
  25.  IF stderr.fh AND (stderr.fh <> stdout) AND stderr<>0 THEN Close(stderr.fh)
  26.  stderr.fh:=0
  27. ENDPROC
  28.  
  29. PROC err_Dispose()
  30.  IF stderr=0 THEN RETURN
  31.  err_Close()
  32.  Dispose(stderr)
  33.  stderr:=0
  34. ENDPROC
  35.  
  36. PROC err_Open() HANDLE
  37. /* NOTE: you may wish to change the format string printed in the print
  38.  * statement.
  39.  */
  40.  DEF dt:datetime,tmp
  41.  IF stderr=0
  42.   stderr:=New(SIZEOF err_port)
  43.   stderr.fh:=0
  44.   stderr.private:=0
  45.   stderr.filename:=0
  46.  ENDIF
  47.  IF stderr.filename <> stderr.private
  48.   err_Close()
  49.   IF stderr.filename=stdout
  50.    stderr.fh:=stdout
  51.   ENDIF
  52.   stderr.private:=stderr.filename
  53.  ENDIF
  54.  IF stderr.private AND (stderr.private <> stdout)
  55.   DateStamp(dt.stamp)
  56.   dt.format:=FORMAT_DOS /* set datetime options */
  57.   dt.flags:=0
  58.   dt.strday:=String(11)
  59.   dt.strdate:=String(11)
  60.   dt.strtime:=String(11)
  61.   DateToStr(dt)         /* make into string */
  62.   IF tmp := Open(stderr.private,MODE_READWRITE)
  63.     stderr.fh := tmp
  64.     Seek(stderr.fh,0,OFFSET_END)
  65.   ENDIF
  66.   VfPrintf(stderr.fh,'\nExample: \s | \s | \s\n\n',[dt.strday,dt.strdate,dt.strtime])
  67.   Flush(stderr.fh)
  68.  ELSEIF wbmessage                 /* if called from icon */
  69.   WriteF('')
  70.   stderr.fh:=stdout
  71.  ELSEIF stderr.private <> stdout
  72.   stderr.fh:=Open('CONSOLE:',NEWFILE) /* for stderr activity on CLI call */
  73.  ENDIF
  74.  IF stderr.fh=0
  75.   stderr.fh:=stdout
  76.  ENDIF
  77.  
  78. EXCEPT
  79.  err_Close()
  80.  WriteF('*** Error in err_Open()\n')
  81.  Raise(exception)
  82. ENDPROC
  83.  
  84. PROC err_WriteF(format,items) HANDLE
  85. /* Here's a way to write errors without having to open a window until we
  86.  * absolutely HAVE to.
  87.  */
  88.  err_Open()
  89.  IF items
  90.   VfPrintf(stderr.fh,format,items)
  91.   Flush(stderr.fh)
  92.  ELSE
  93.   Fputs(stderr.fh,format)
  94.   Flush(stderr.fh)
  95.  ENDIF
  96. EXCEPT
  97.  WriteF('Error in err_WriteF()\n')
  98.  Raise(exception)
  99. ENDPROC
  100.  
  101. PROC main() HANDLE
  102.  
  103. /* Establish where stdout is...*/
  104.  
  105. WriteF('STDIO port.\n')
  106.  
  107. /* Create the stderr port to use CONSOLE: */
  108.  
  109. err_New(NIL)
  110.  
  111. /* Now write to it.. */
  112.  
  113. err_WriteF('This is the StdErr port.\n',0)
  114.  
  115. /* Now open a seperate window and print stuff...*/
  116. stderr.filename:='con:'
  117. err_WriteF('I wonder if this works?\n',0)
  118.  
  119. /*Print to a file...*/
  120. stderr.filename:='ram:readme.txt'
  121. err_WriteF('This is the \drd time I''ve called err_WriteF()!\n',[3])
  122.  
  123. /* Now use CONSOLE: again.. */
  124. stderr.filename:=0
  125. err_WriteF('(stderr) Number \d & \d are happy.\n',[234,2])
  126.  
  127. /* Try writing to stdout instead... */
  128. stderr.filename:=stdout
  129. err_WriteF('Final Test (stdout)\n',0)
  130.  
  131. /* Enough silliness... let's cleanup and get outta here.*/
  132. err_Dispose()
  133.  
  134. EXCEPT
  135.  err_Dispose()
  136.  WriteF('Error in main()\n')
  137.  SELECT exception
  138.   CASE "OPEN"
  139.    WriteF('Couldn''t open file.\n')
  140.   CASE "MEM"
  141.    WriteF('Not enough memory.\n')
  142.  ENDSELECT
  143. ENDPROC
  144.